﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Rance.Battle;

namespace Rance
{
    /// <summary>
    /// Win_Fight.xaml 的交互逻辑
    /// </summary>
    public partial class Win_Fight : Window
    {
        private 战斗管理 战斗管理;
        private UI战斗 UI战斗;
        public Win_Fight(战斗管理 战斗管理)
        {
            InitializeComponent();
            this.战斗管理 = 战斗管理;
            战斗管理.Team1ActionEvent += new EventHandler<ActionEventArgs>(战斗管理_ActionEvent);
            战斗管理.Team2ActionEvent += new EventHandler<ActionEventArgs>(战斗管理_ActionEvent);

            战斗管理.Team1WarEndEvent += new EventHandler<WarEndEventArgs>(战斗管理_WarEndEvent);
            战斗管理.Team1ActionResultEvent += new EventHandler<ActionResultEventArgs>(战斗管理_ActionResultEvent);

            initUI战斗();
        }

        void 战斗管理_ActionEvent(object sender, ActionEventArgs e)
        {
            set行动者(e);
        }

        void 战斗管理_ActionResultEvent(object sender, ActionResultEventArgs e)
        {
            copy(e.队伍状态, UI战斗);

            copy(e.队伍状态.行动顺序, UI战斗.行动顺序);

            foreach (var 角色 in e.队伍状态.己方角色List)
            {
                var ui角色 = (from r in UI战斗.TeamAList
                            where r.ID == 角色.ID
                            select r).SingleOrDefault();

                copy(角色, ui角色);
                ui角色.选择中 = false;
            }
            foreach (var 角色 in e.队伍状态.对手角色List)
            {
                var ui角色 = (from r in UI战斗.TeamBList
                            where r.ID == 角色.ID
                            select r).SingleOrDefault();

                copy(角色, ui角色);
                ui角色.选择中 = false;
            }

            show(e.队伍状态.行动结果);

            战斗管理.Ready(UI战斗.TeamAID);
            战斗管理.Ready(UI战斗.TeamBID);
        }

        void 战斗管理_WarEndEvent(object sender, WarEndEventArgs e)
        {
            Win_FightResult win = new Win_FightResult();
            win.UI战斗 = UI战斗;
            win.Win_Fight = this;

            win.战斗结果 = e.Data战斗结果;
            win.ShowDialog();
        }

        private void initUI战斗()
        {
            UI战斗 = new UI战斗();
            UI战斗.TeamAID = 战斗管理.Get队伍1ID();
            UI战斗.TeamBID = 战斗管理.Get队伍2ID();


            var 队伍状态 = 战斗管理.ReceiveNewlyAction(UI战斗.TeamAID);
            UI战斗.TeamA = 队伍状态.Name;
            UI战斗.TeamB = 队伍状态.对手Name;
            UI战斗.TeamAList = new List<UI角色>();
            UI战斗.TeamBList = new List<UI角色>();

            copy(队伍状态, UI战斗);

            foreach (var 角色 in 队伍状态.己方角色List)
            {
                UI角色 ui角色 = new UI角色();
                ui角色.ID = 角色.ID;
                ui角色.UI战斗 = UI战斗;
                ui角色.Name = 角色.Name;
                ui角色.兵种 = 角色.兵种;
                ui角色.IsTeamA = true;
                ui角色.攻 = 角色.攻;
                ui角色.防 = 角色.防;
                ui角色.智 = 角色.智;
                ui角色.速 = 角色.速;
                ui角色.排 = 角色.排;
                ui角色.列 = 角色.列;
                ui角色.顺序值 = 角色.顺序值;
                if (角色.排 == 1 && 角色.列 == 1)
                    UI战斗.TeamA左军先锋 = ui角色;
                else if (角色.排 == 1 && 角色.列 == 2)
                    UI战斗.TeamA左军后卫 = ui角色;
                else if (角色.排 == 2 && 角色.列 == 1)
                    UI战斗.TeamA中军先锋 = ui角色;
                else if (角色.排 == 2 && 角色.列 == 2)
                    UI战斗.TeamA中军后卫 = ui角色;
                else if (角色.排 == 3 && 角色.列 == 1)
                    UI战斗.TeamA右军先锋 = ui角色;
                else if (角色.排 == 3 && 角色.列 == 2)
                    UI战斗.TeamA右军后卫 = ui角色;

                ui角色.最大行动点 = 角色.最大行动点;
                ui角色.最大兵力 = 角色.最大兵力;
                ui角色.IsTeamA = true;

                copy(角色, ui角色);

                UI战斗.TeamAList.Add(ui角色);
            }

            foreach (var 角色 in 队伍状态.对手角色List)
            {
                UI角色 ui角色 = new UI角色();
                ui角色.ID = 角色.ID;
                ui角色.UI战斗 = UI战斗;
                ui角色.Name = 角色.Name;
                ui角色.兵种 = 角色.兵种;
                ui角色.IsTeamA = true;
                ui角色.攻 = 角色.攻;
                ui角色.防 = 角色.防;
                ui角色.智 = 角色.智;
                ui角色.速 = 角色.速;
                ui角色.排 = 角色.排;
                ui角色.列 = 角色.列;
                ui角色.顺序值 = 角色.顺序值;
                if (角色.排 == 1 && 角色.列 == 1)
                    UI战斗.TeamB左军先锋 = ui角色;
                else if (角色.排 == 1 && 角色.列 == 2)
                    UI战斗.TeamB左军后卫 = ui角色;
                else if (角色.排 == 2 && 角色.列 == 1)
                    UI战斗.TeamB中军先锋 = ui角色;
                else if (角色.排 == 2 && 角色.列 == 2)
                    UI战斗.TeamB中军后卫 = ui角色;
                else if (角色.排 == 3 && 角色.列 == 1)
                    UI战斗.TeamB右军先锋 = ui角色;
                else if (角色.排 == 3 && 角色.列 == 2)
                    UI战斗.TeamB右军后卫 = ui角色;

                ui角色.最大行动点 = 角色.最大行动点;
                ui角色.最大兵力 = 角色.最大兵力;
                ui角色.IsTeamA = false;

                copy(角色, ui角色);

                UI战斗.TeamBList.Add(ui角色);
            }

            UI战斗.行动顺序 = new UI行动顺序();
            copy(队伍状态.行动顺序, UI战斗.行动顺序);

            战斗管理.Ready(UI战斗.TeamAID);
            战斗管理.Ready(UI战斗.TeamBID);

            this.DataContext = UI战斗;
        }

        //private 队伍 convert(Team team)
        //{
        //    队伍 队伍 = new 队伍();
        //    队伍.Name = team.Name;
        //    队伍.成员List = new List<角色>();
        //    foreach (var item in team.TeamRole)
        //    {
        //        Role role = item.Role;
        //        角色 角色 = 战斗管理.Create(role.Name.Trim(), role.兵种.Trim(), role.攻, role.防, role.智, role.速, role.行动点, role.兵力, role.兵力, item.排, item.列, role.基础攻击技能, role.技能1, role.技能2, role.被动技能, role.特殊技能, role.特殊人物);
        //        队伍.成员List.Add(角色);
        //    }

        //    return 队伍;
        //}

        //private UI战斗 create(战场 战场)
        //{
        //    UI战斗 UI战斗 = new UI战斗();
        //    UI战斗.最大回合数 = 战场.最大回合数;
        //    UI战斗.TeamA = 战场.己方队伍名称;
        //    UI战斗.TeamB = 战场.敌方队伍名称;
        //    UI战斗.TeamAList = new List<UI角色>();
        //    UI战斗.TeamBList = new List<UI角色>();

        //    copy(战场, UI战斗);

        //    foreach (var 角色 in 战场.己方角色List)
        //    {
        //        UI角色 ui角色 = new UI角色();
        //        ui角色.角色 = 角色;
        //        ui角色.UI战斗 = UI战斗;
        //        ui角色.Name = 角色.Name;
        //        ui角色.兵种 = 角色.兵种.Name;
        //        ui角色.IsTeamA = true;
        //        ui角色.攻 = 角色.攻;
        //        ui角色.防 = 角色.防;
        //        ui角色.智 = 角色.智;
        //        ui角色.速 = 角色.速;
        //        ui角色.排 = 角色.排;
        //        ui角色.列 = 角色.列;
        //        ui角色.顺序值 = 角色.顺序值;
        //        if (角色.排 == 1 && 角色.列 == 1)
        //            UI战斗.TeamA左军先锋 = ui角色;
        //        else if (角色.排 == 1 && 角色.列 == 2)
        //            UI战斗.TeamA左军后卫 = ui角色;
        //        else if (角色.排 == 2 && 角色.列 == 1)
        //            UI战斗.TeamA中军先锋 = ui角色;
        //        else if (角色.排 == 2 && 角色.列 == 2)
        //            UI战斗.TeamA中军后卫 = ui角色;
        //        else if (角色.排 == 3 && 角色.列 == 1)
        //            UI战斗.TeamA右军先锋 = ui角色;
        //        else if (角色.排 == 3 && 角色.列 == 2)
        //            UI战斗.TeamA右军后卫 = ui角色;

        //        ui角色.最大行动点 = 角色.最大行动点;
        //        ui角色.最大兵力 = 角色.最大兵力;

        //        if (角色.基础攻击技能 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.基础攻击技能.Name, 行动点 = 角色.基础攻击技能.消耗行动点, 技能目标 = 角色.基础攻击技能.技能目标 });
        //        if (角色.技能1 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.技能1.Name, 行动点 = 角色.技能1.消耗行动点, 技能目标 = 角色.技能1.技能目标 });
        //        if (角色.技能2 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.技能2.Name, 行动点 = 角色.技能2.消耗行动点, 技能目标 = 角色.技能2.技能目标 });
        //        if (角色.待机 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.待机.Name, 行动点 = 角色.待机.消耗行动点, 技能目标 = 角色.待机.技能目标 });

        //        copy(角色, ui角色);
        //        UI战斗.TeamAList.Add(ui角色);
        //    }

        //    foreach (var 角色 in 战场.敌方角色List)
        //    {
        //        UI角色 ui角色 = new UI角色();
        //        ui角色.角色 = 角色;
        //        ui角色.UI战斗 = UI战斗;
        //        ui角色.Name = 角色.Name;
        //        ui角色.兵种 = 角色.兵种.Name;
        //        ui角色.IsTeamA = false;
        //        ui角色.攻 = 角色.攻;
        //        ui角色.防 = 角色.防;
        //        ui角色.智 = 角色.智;
        //        ui角色.速 = 角色.速;
        //        ui角色.排 = 角色.排;
        //        ui角色.列 = 角色.列;
        //        ui角色.顺序值 = 角色.顺序值;
        //        if (角色.排 == 1 && 角色.列 == 1)
        //            UI战斗.TeamB左军先锋 = ui角色;
        //        else if (角色.排 == 1 && 角色.列 == 2)
        //            UI战斗.TeamB左军后卫 = ui角色;
        //        else if (角色.排 == 2 && 角色.列 == 1)
        //            UI战斗.TeamB中军先锋 = ui角色;
        //        else if (角色.排 == 2 && 角色.列 == 2)
        //            UI战斗.TeamB中军后卫 = ui角色;
        //        else if (角色.排 == 3 && 角色.列 == 1)
        //            UI战斗.TeamB右军先锋 = ui角色;
        //        else if (角色.排 == 3 && 角色.列 == 2)
        //            UI战斗.TeamB右军后卫 = ui角色;

        //        ui角色.最大行动点 = 角色.最大行动点;
        //        ui角色.最大兵力 = 角色.最大兵力;

        //        if (角色.基础攻击技能 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.基础攻击技能.Name, 行动点 = 角色.基础攻击技能.消耗行动点, 技能目标 = 角色.基础攻击技能.技能目标 });
        //        if (角色.技能1 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.技能1.Name, 行动点 = 角色.技能1.消耗行动点, 技能目标 = 角色.技能1.技能目标 });
        //        if (角色.技能2 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.技能2.Name, 行动点 = 角色.技能2.消耗行动点, 技能目标 = 角色.技能2.技能目标 });
        //        if (角色.待机 != null)
        //            ui角色.技能List.Add(new UI技能() { Name = 角色.待机.Name, 行动点 = 角色.待机.消耗行动点, 技能目标 = 角色.待机.技能目标 });

        //        copy(角色, ui角色);
        //        UI战斗.TeamBList.Add(ui角色);
        //    }

        //    UI战斗.行动顺序 = new UI行动顺序();
        //    copy(战场.行动顺序, UI战斗.行动顺序, UI战斗);

        //    return UI战斗;
        //}

        private void set行动者(ActionEventArgs args)
        {
            IsSkilling = false;
            foreach (var 角色 in UI战斗.TeamAList)
                角色.行动中 = false;
            foreach (var 角色 in UI战斗.TeamBList)
                角色.行动中 = false;

            var ui角色 = (from r in UI战斗.TeamAList
                        where r.ID == args.角色.ID
                        select r).SingleOrDefault();
            if (ui角色 == null)
                ui角色 = (from r in UI战斗.TeamBList
                        where r.ID == args.角色.ID
                        select r).SingleOrDefault();

            UI战斗.Current角色 = ui角色;
            UI战斗.Current角色.行动中 = true;

            btn取消.Visibility = System.Windows.Visibility.Hidden;

            if (args.技能List.Count > 0)
            {
                btn技能1.Content = args.技能List[0].ToString();
                btn技能1.DataContext = args.技能List[0];
                btn技能1.IsEnabled = args.技能List[0].Effective;
                btn技能1.Visibility = System.Windows.Visibility.Visible;

                if (args.技能List.Count > 1)
                {
                    btn技能2.Content = args.技能List[1].ToString();
                    btn技能2.DataContext = args.技能List[1];
                    btn技能2.IsEnabled = args.技能List[1].Effective;
                    btn技能2.Visibility = System.Windows.Visibility.Visible;

                    if (args.技能List.Count > 2)
                    {
                        btn技能3.Content = args.技能List[2].ToString();
                        btn技能3.DataContext = args.技能List[2];
                        btn技能3.IsEnabled = args.技能List[2].Effective;
                        btn技能3.Visibility = System.Windows.Visibility.Visible;

                        if (args.技能List.Count > 3)
                        {
                            btn技能4.Content = args.技能List[3].ToString();
                            btn技能4.DataContext = args.技能List[3];
                            btn技能4.IsEnabled = args.技能List[3].Effective;
                            btn技能4.Visibility = System.Windows.Visibility.Visible;
                        }
                        else
                        {
                            btn技能4.Visibility = System.Windows.Visibility.Hidden;

                            btn技能4.DataContext = null;
                        }
                    }
                    else
                    {
                        btn技能3.Visibility = System.Windows.Visibility.Hidden;
                        btn技能4.Visibility = System.Windows.Visibility.Hidden;

                        btn技能3.DataContext = null;
                        btn技能4.DataContext = null;
                    }
                }
                else
                {
                    btn技能2.Visibility = System.Windows.Visibility.Hidden;
                    btn技能3.Visibility = System.Windows.Visibility.Hidden;
                    btn技能4.Visibility = System.Windows.Visibility.Hidden;

                    btn技能2.DataContext = null;
                    btn技能3.DataContext = null;
                    btn技能4.DataContext = null;
                }
            }
            else
            {
                btn技能1.Visibility = System.Windows.Visibility.Hidden;
                btn技能2.Visibility = System.Windows.Visibility.Hidden;
                btn技能3.Visibility = System.Windows.Visibility.Hidden;
                btn技能4.Visibility = System.Windows.Visibility.Hidden;

                btn技能1.DataContext = null;
                btn技能2.DataContext = null;
                btn技能3.DataContext = null;
                btn技能4.DataContext = null;
            }
        }

        private void copy(Data队伍状态 队伍状态, UI战斗 UI战斗)
        {
            UI战斗.当前回合 = 队伍状态.当前回合;
            UI战斗.最大回合数 = 队伍状态.最大回合数;
            UI战斗.战果 = 队伍状态.战果;
            UI战斗.战场修正 = 队伍状态.战场修正;
        }

        private void copy(Data战斗角色 角色, UI角色 ui角色)
        {
            ui角色.败退 = 角色.是否败退;
            ui角色.兵力 = 角色.兵力;
            ui角色.攻赋予 = 角色.攻状态 == 属性状态.赋予;
            ui角色.防赋予 = 角色.防状态 == 属性状态.赋予;
            ui角色.速赋予 = 角色.速状态 == 属性状态.赋予;
            ui角色.智赋予 = 角色.智状态 == 属性状态.赋予;
            ui角色.攻诅咒 = 角色.攻状态 == 属性状态.诅咒;
            ui角色.防诅咒 = 角色.防状态 == 属性状态.诅咒;
            ui角色.速诅咒 = 角色.速状态 == 属性状态.诅咒;
            ui角色.智诅咒 = 角色.智状态 == 属性状态.诅咒;
            ui角色.行动点 = 角色.行动点;
            ui角色.守护率 = 角色.守护率;
            ui角色.全体守护率 = 角色.全体守护率;
            ui角色.护盾 = 角色.护盾;
            ui角色.准备 = 角色.是否准备;
            ui角色.顺序值 = 角色.顺序值;
        }

        private void copy(List<Guid> 行动顺序, UI行动顺序 UI行动顺序)
        {
            if (行动顺序.Count > 0)
            {
                var 角色 = UI战斗.TeamAList.SingleOrDefault(m => m.ID == 行动顺序[0]);
                if (角色 == null)
                    角色 = UI战斗.TeamBList.SingleOrDefault(m => m.ID == 行动顺序[0]);
                UI行动顺序.行动者1 = 角色;
            }
            else
                UI行动顺序.行动者1 = null;

            if (行动顺序.Count > 1)
            {
                var 角色 = UI战斗.TeamAList.SingleOrDefault(m => m.ID == 行动顺序[1]);
                if (角色 == null)
                    角色 = UI战斗.TeamBList.SingleOrDefault(m => m.ID == 行动顺序[1]);
                UI行动顺序.行动者2 = 角色;
            }
            else
                UI行动顺序.行动者2 = null;

            if (行动顺序.Count > 2)
            {
                var 角色 = UI战斗.TeamAList.SingleOrDefault(m => m.ID == 行动顺序[2]);
                if (角色 == null)
                    角色 = UI战斗.TeamBList.SingleOrDefault(m => m.ID == 行动顺序[2]);
                UI行动顺序.行动者3 = 角色;
            }
            else
                UI行动顺序.行动者3 = null;

            if (行动顺序.Count > 3)
            {
                var 角色 = UI战斗.TeamAList.SingleOrDefault(m => m.ID == 行动顺序[3]);
                if (角色 == null)
                    角色 = UI战斗.TeamBList.SingleOrDefault(m => m.ID == 行动顺序[3]);
                UI行动顺序.行动者4 = 角色;
            }
            else
                UI行动顺序.行动者4 = null;

            if (行动顺序.Count > 4)
            {
                var 角色 = UI战斗.TeamAList.SingleOrDefault(m => m.ID == 行动顺序[4]);
                if (角色 == null)
                    角色 = UI战斗.TeamBList.SingleOrDefault(m => m.ID == 行动顺序[4]);
                UI行动顺序.行动者5 = 角色;
            }
            else
                UI行动顺序.行动者5 = null;

            if (行动顺序.Count > 5)
            {
                var 角色 = UI战斗.TeamAList.SingleOrDefault(m => m.ID == 行动顺序[5]);
                if (角色 == null)
                    角色 = UI战斗.TeamBList.SingleOrDefault(m => m.ID == 行动顺序[5]);
                UI行动顺序.行动者6 = 角色;
            }
            else
                UI行动顺序.行动者6 = null;

        }

        private bool IsSkilling = false;
        private Data技能 current技能;

        private void btn技能_Click(object sender, RoutedEventArgs e)
        {
            if (IsSkilling)
                return;
            IsSkilling = true;
            Button button = (Button)e.Source;
            current技能 = (Data技能)button.DataContext;

            if (btn技能1 != button)
                btn技能1.IsEnabled = false;
            if (btn技能2 != button)
                btn技能2.IsEnabled = false;
            if (btn技能3 != button)
                btn技能3.IsEnabled = false;
            if (btn技能4 != button)
                btn技能4.IsEnabled = false;

            btn取消.Visibility = System.Windows.Visibility.Visible;
        }

        private void btn取消_Click(object sender, RoutedEventArgs e)
        {
            IsSkilling = false;
            if (btn技能1.DataContext != null)
                btn技能1.IsEnabled = true;
            if (btn技能2.DataContext != null)
                btn技能2.IsEnabled = true;
            if (btn技能3.DataContext != null)
                btn技能3.IsEnabled = true;
            if (btn技能4.DataContext != null)
                btn技能4.IsEnabled = true;

            current技能 = null;

            btn取消.Visibility = System.Windows.Visibility.Hidden;
        }

        private void us_Role_MouseEnter(object sender, MouseEventArgs e)
        {
            if (!IsSkilling)
                return;
            Us_Role usRole = (Us_Role)e.Source;
            if (usRole.DataContext == null)
                return;
            UI角色 角色 = (UI角色)usRole.DataContext;
            if (角色.败退)
                return;

            if (current技能 == null)
                return;

            Data技能目标 技能目标 = (from t in current技能.目标List
                             where t.角色.ID == 角色.ID
                             select t).SingleOrDefault();

            if (技能目标 == null)
                return;

            var idList = (from r in 技能目标.连带角色List
                          select r.ID).ToList();

            var list = (from r in UI战斗.TeamAList
                        where idList.Contains(r.ID) &&
                              !r.败退
                        select r).ToList();

            list.AddRange((from r in UI战斗.TeamBList
                           where idList.Contains(r.ID) &&
                                 !r.败退
                           select r));

            foreach (var ui角色 in list)
                ui角色.选择中 = true;
        }

        private void select角色(UI角色[] list)
        {
            foreach (var 角色 in list)
            {
                if (!角色.败退)
                    角色.选择中 = true;
            }
        }

        //private void teamA选择(UI角色 角色)
        //{
        //    switch (current技能.技能目标)
        //    {
        //        case 技能目标.全体任一:
        //            if (!角色.IsTeamA)
        //                角色.选择中 = true;
        //            break;
        //        case 技能目标.全体:
        //            if (!角色.IsTeamA)
        //            {
        //                foreach (var item in UI战斗.TeamBList)
        //                    if (!item.败退)
        //                        item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标.最前列任一:
        //            if (!角色.IsTeamA)
        //            {
        //                if (角色.列 == 1)
        //                    角色.选择中 = true;
        //                else
        //                {
        //                    if ((UI战斗.TeamB右军先锋 == null || UI战斗.TeamB右军先锋.败退) &&
        //                        (UI战斗.TeamB中军先锋 == null || UI战斗.TeamB中军先锋.败退) &&
        //                        (UI战斗.TeamB左军先锋 == null || UI战斗.TeamB左军先锋.败退))
        //                        角色.选择中 = true;
        //                }
        //            }
        //            break;
        //        case 技能目标.同排全体:
        //            int 排 = 0;
        //            if (UI战斗.Current角色.排 == 3)
        //                排 = 1;
        //            else if (UI战斗.Current角色.排 == 2)
        //                排 = 2;
        //            else if (UI战斗.Current角色.排 == 1)
        //                排 = 3;
        //            if (!角色.IsTeamA && 角色.排 == 排)
        //            {
        //                var list = (from u in UI战斗.TeamBList
        //                            where u.排 == 排 &&
        //                                  !u.败退
        //                            select u).ToList();

        //                foreach (var item in list)
        //                    item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标.一排全体:
        //            if (!角色.IsTeamA)
        //            {
        //                var list = (from u in UI战斗.TeamBList
        //                            where u.排 == 角色.排 &&
        //                                  !u.败退
        //                            select u).ToList();

        //                foreach (var item in list)
        //                    item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标._2X2:
        //            if (!角色.IsTeamA)
        //            {
        //                if (角色.排 == 1)
        //                    select角色(new UI角色[] { UI战斗.TeamB中军先锋, UI战斗.TeamB中军后卫, UI战斗.TeamB左军后卫, UI战斗.TeamB左军先锋 });
        //                else
        //                    select角色(new UI角色[] { UI战斗.TeamB中军先锋, UI战斗.TeamB中军后卫, UI战斗.TeamB右军后卫, UI战斗.TeamB右军先锋 });
        //            }
        //            break;
        //        case 技能目标.己方全体:
        //            if (角色.IsTeamA)
        //            {
        //                foreach (var item in UI战斗.TeamAList)
        //                    if (!item.败退)
        //                        item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标.己方任一:
        //            if (角色.IsTeamA && !角色.败退)
        //                角色.选择中 = true;
        //            break;
        //        case 技能目标.自己:
        //            if (角色.IsTeamA)
        //                UI战斗.Current角色.选择中 = true;
        //            break;
        //    }
        //}

        //private void teamB选择(UI角色 角色)
        //{
        //    switch (current技能.技能目标)
        //    {
        //        case 技能目标.全体任一:
        //            if (角色.IsTeamA)
        //                角色.选择中 = true;
        //            break;
        //        case 技能目标.全体:
        //            if (角色.IsTeamA)
        //            {
        //                foreach (var item in UI战斗.TeamAList)
        //                    if (!item.败退)
        //                        item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标.最前列任一:
        //            if (角色.IsTeamA)
        //            {
        //                if (角色.列 == 1)
        //                    角色.选择中 = true;
        //                else
        //                {
        //                    if ((UI战斗.TeamA左军先锋 == null || UI战斗.TeamA左军先锋.败退) &&
        //                        (UI战斗.TeamA中军先锋 == null || UI战斗.TeamA中军先锋.败退) &&
        //                        (UI战斗.TeamA右军先锋 == null || UI战斗.TeamA右军先锋.败退))
        //                        角色.选择中 = true;
        //                }
        //            }
        //            break;
        //        case 技能目标.同排全体:
        //            int 排 = 0;
        //            if (UI战斗.Current角色.排 == 3)
        //                排 = 1;
        //            else if (UI战斗.Current角色.排 == 2)
        //                排 = 2;
        //            else if (UI战斗.Current角色.排 == 1)
        //                排 = 3;
        //            if (角色.IsTeamA && 角色.排 == 排)
        //            {
        //                var list = (from u in UI战斗.TeamAList
        //                            where u.排 == 排 &&
        //                                  !u.败退
        //                            select u).ToList();

        //                foreach (var item in list)
        //                    item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标.一排全体:
        //            if (角色.IsTeamA)
        //            {
        //                var list = (from u in UI战斗.TeamBList
        //                            where u.排 == 角色.排 &&
        //                                  !u.败退
        //                            select u).ToList();

        //                foreach (var item in list)
        //                    item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标._2X2:
        //            if (角色.IsTeamA)
        //            {
        //                if (角色.排 == 3)
        //                    select角色(new UI角色[] { UI战斗.TeamB中军先锋, UI战斗.TeamB中军后卫, UI战斗.TeamB右军后卫, UI战斗.TeamB右军先锋 });
        //                else
        //                    select角色(new UI角色[] { UI战斗.TeamB中军先锋, UI战斗.TeamB中军后卫, UI战斗.TeamB左军后卫, UI战斗.TeamB左军先锋 });
        //            }
        //            break;
        //        case 技能目标.己方全体:
        //            if (!角色.IsTeamA)
        //            {
        //                foreach (var item in UI战斗.TeamBList)
        //                    if (!item.败退)
        //                        item.选择中 = true;
        //            }
        //            break;
        //        case 技能目标.己方任一:
        //            if (!角色.IsTeamA && !角色.败退)
        //                角色.选择中 = true;
        //            break;
        //        case 技能目标.自己:
        //            if (!角色.IsTeamA)
        //                UI战斗.Current角色.选择中 = true;
        //            break;
        //    }
        //}

        private void us_Role_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (!IsSkilling)
                return;

            var list = (from t in UI战斗.TeamAList
                             where !t.败退 && t.选择中
                             orderby t.列, t.排
                             select t.ID).ToList();

            list.AddRange((from t in UI战斗.TeamBList
                           where !t.败退 && t.选择中
                           orderby t.列, t.排 descending
                           select t.ID));

            if (list.Count == 0)
                return;

            战斗管理.Action(UI战斗.Current角色.ID, current技能.Name, list);
        }

        //private void end()
        //{
        //    Win_FightResult win = new Win_FightResult();
        //    win.UI战斗 = UI战斗;
        //    win.Win_Fight = this;

        //    win.战斗结果 = 战斗管理.战斗结算()[0];
        //    win.ShowDialog();
        //}

        private void show(Data行动结果 行动结果)
        {
            lstResult.Items.Insert(0, 行动结果.ToString());
        }

        private void us_Role_MouseLeave(object sender, MouseEventArgs e)
        {
            clear选择();
        }

        private void clear选择()
        {
            foreach (var 角色 in UI战斗.TeamAList)
                角色.选择中 = false;
            foreach (var 角色 in UI战斗.TeamBList)
                角色.选择中 = false;
        }


    }
}
